gusucode.com > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM源码程序 > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM\stprtool\linear\anderson\testandr.m

    function [MI,SIGMA,J]=testandr(dim,epsilon,dnoise,maxcoord,diagm)
% TESTANDR creates testing data for Generalized Anderson's task.
% [MI,SIGMA,J]=testandr(dim,epsilon,dnoise,maxcoord,diagm)
%
% TESTANDR generates a test input set for the Generalized Anderson's 
%  task (GAT). It is intended for creating of test data for comparison 
%  of the algorithms solving GAT.
%   
% Input:
%  dim [1x1]      dimension of the feature space.
%  epsilon [1x1]  a probability of wrong classification for the optimal 
%                 solution, i.e. the minimal error which any algorithm can
%                 achieve. The value of the epsilon must be 0 < epsilon <0.5
%  dnoise [1x1]   a number of the additional distributions which do not
%                 determine the optimal solution. A purpose of these 
%                 distributions is to make work of the evaluted algorithm
%                 more difficult. Default value is dnoise=0.
%  maxcoord [1x1] is a range the coordinates of mean values.
%                 Default is maxcoord=10.
%  diagm [1x1]    if diagm == 1 then the diagonal covariance matrix will be 
%                 used.
%
% Output:
%  (denote K = (dim-1)*4+dnoise as number of the generated distributions ).
%
%  MI [dim,K]     contains the K vectors of mean values, 
%                 i.e. MI=[mi_1,mi_2,...mi_K].
%  SIGMA [dim,dim*K] contains the covariance matrices,
%                 i.e. SIGMA=[sigma_1,...,sigma_K].
%  J [1,K]        contains class labels of given distribution - a pair of
%                 mean value and covariance matrix. 
%
% See also 
%   GANDERS, GANDERS2, EANDERS, OANDERS, GGANDES.
%

% Statistical Pattern Recognition Toolbox, Vojtech Franc, Vaclav Hlavac
% (c) Czech Technical University Prague, http://cmp.felk.cvut.cz
% Written Vojtech Franc (diploma thesis)
% Modifications
% 26-feb-2001 V.Franc


if nargin < 2,
  error('Not enought input parameters.');
  return;
end

if nargin < 3,
  dnoise=0;
end

if nargin < 4,
  maxcoord=10;
end

if nargin < 5,
  diagm=0;
end 

if epsilon <=0 | epsilon >=0.5,
  error('Input paramater epsilon is out of range.');
  return;
end

% computes Mahalanobis distance in according to epsilon
r=-icdf('norm',epsilon,0,1);

alpha=zeros(dim,1);
alpha(dim)=1;
theta=0;

K=(dim-1)*4+dnoise;

MI=zeros(dim,K);   %MI=[];
SIGMA=zeros(dim,dim*K);   %SIGMA=[];
J=[];
j=0;
for i=1:dim-1,
  clear mi sigma x0;
  
  % ++
  j=j+1;
  sigma=randpds(dim,diagm); %  sigma=gcov(dim);
  mi=zeros(dim,1);
  mi(i)=maxcoord*rand(1);
%  if (size(alpha,1)~=size(sigma,1)),
%     alpha
%     sigma
%  end
  mi(dim)=r*sqrt(alpha'*sigma*alpha);
  
  % enusures that the mi(i) coordinates will have a right sign
  x0=mi-(alpha'*mi)*sigma*alpha/(alpha'*sigma*alpha);
  if x0(i) < 0, x0(i)=-x0(i); end
  
  MI(:,j)=mi;   % MI=[MI,mi];
  SIGMA(:,(j-1)*dim+1:dim*j)=sigma;  %SIGMA=[SIGMA,sigma];
  J=[J,1];
      
  % +-
  j=j+1;
%  sigma=gcov(dim);
  sigma=randpds(dim,diagm);
  mi=zeros(dim,1);
  mi(i)=-maxcoord*rand(1);
  if (size(alpha,1)~=size(sigma,1)),
     alpha
     sigma
  end
  mi(dim)=r*sqrt(alpha'*sigma*alpha);

  % enusures that the mi(i) coordinates will have a right sign
  x0=mi-(alpha'*mi)*sigma*alpha/(alpha'*sigma*alpha);
  if x0(i) > 0, x0(i)=-x0(i); end
  
  MI(:,j)=mi;   % MI=[MI,mi];
  SIGMA(:,(j-1)*dim+1:dim*j)=sigma;  %SIGMA=[SIGMA,sigma];
  J=[J,1];

  % -+
  j=j+1;
%  sigma=gcov(dim);
  sigma=randpds(dim,diagm);
  mi=zeros(dim,1);
  mi(i)=maxcoord*rand(1);
  if (size(alpha,1)~=size(sigma,1)),
     alpha
     sigma
  end
  mi(dim)=-r*sqrt(alpha'*sigma*alpha);
%  size(alpha)
%  size(sigma)

  % enusures that the mi(i) coordinates will have a right sign
  x0=mi-(alpha'*mi)*sigma*alpha/(alpha'*sigma*alpha);
  if x0(i) < 0, x0(i)=-x0(i); end
  
  MI(:,j)=mi;   % MI=[MI,mi];
  SIGMA(:,(j-1)*dim+1:dim*j)=sigma;  %SIGMA=[SIGMA,sigma];
  J=[J,2];

  % --
  j=j+1;
%  sigma=gcov(dim);
  sigma=randpds(dim,diagm);
  mi=zeros(dim,1);
  mi(i)=-maxcoord*rand(1);
  if (size(alpha,1)~=size(sigma,1)),
     alpha
     sigma
  end
  mi(dim)=-r*sqrt(alpha'*sigma*alpha);
  
  % enusures that the mi(i) coordinates will have a right sign
  x0=mi-(alpha'*mi)*sigma*alpha/(alpha'*sigma*alpha);
  if x0(i) > 0, x0(i)=-x0(i); end  
  
  MI(:,j)=mi;   % MI=[MI,mi];
  SIGMA(:,(j-1)*dim+1:dim*j)=sigma;  %SIGMA=[SIGMA,sigma];
  J=[J,2];
end

for i=1:dnoise,
  j=j+1;
  mi=rand(dim);
%  sigma=gcov(dim);
  sigma=randpds(dim,diagm);

  % makes mi to be in the first subspace
  if (alpha'*mi) < 0, mi=-mi; end
  
  rr=(alpha'*mi)/sqrt(alpha'*sigma*alpha);   
  rnoise=r+rand(1)/2;
  mi=mi*rnoise/rr;   

  if rand(1) < 0.5,
    J=[J,1];
  else
    J=[J,2];
    mi=-mi;
  end

  MI(:,j)=mi;   % MI=[MI,mi];
  SIGMA(:,(j-1)*dim+1:dim*j)=sigma;  %SIGMA=[SIGMA,sigma];
end